#include <stdio.h>
#include <string.h>
#include <stdlib.h>

#define BUFFER_SIZE   20

//内存泄漏的原因有三个：
// 1.野指针
// 2.malloc申请的地址没有free释放
// 3.踩内存

#define ALLOCATE_SIZE   20

int main()
{
#if 1
    //指针必须初始化，如果不，就会野指针


    //void * 是万能指针，可以强转成任意指针类型

    //在堆上申请空间
    char * ptr = (char *)malloc(sizeof(char) * ALLOCATE_SIZE);
    if (ptr == NULL)
    {
        perror("malloc error"); //动态内存分配出错
        //程序退出
        exit(-1);
    }
    int len = sizeof(ptr);
    printf("len:%d\n", len);
#if 0
    strcpy(ptr, "hello world");
#else
    //使用安全函数strncpy
    //第三个参数减一的作用是保留'\0'使用
    strncpy(ptr, "hello world", ALLOCATE_SIZE - 1);
#endif

    printf("ptr:%s\n", ptr);

    //释放内存
    free(ptr);

#elif 0

    char ptr[BUFFER_SIZE];
    memset(ptr, 0, sizeof(ptr));

    int len = sizeof(ptr);
    printf("len:%d\n", len);

    strcpy(ptr, "hello world");
    printf("ptr:%s\n", ptr);
#elif 0
    //野指针也是内存泄漏
    char *ptr;
    printf("hello world\n");


#endif



    return 0;
}